﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using ModeloDatos;
using CapaNegocio;

namespace CapaPresentacion.GestionCaja
{
    public partial class FrmControlDiario : Form
    {
        //Datos de la caja
        public static int id;
        public static string desc;
        public static int idControlD;
       
      // Objetos ControlDiarioNE 
        public ControlDiarioNE contDiarioNE = new ControlDiarioNE();
        public ControlDiario controlDiario = new ControlDiario();
        public List<ControlDiario> lista = new List<ControlDiario>();

        public ControlDiario cd = new ControlDiario();
        public TipoMovimiento tm = new TipoMovimiento();
       
        //Acumuladores de Ingresos, Egresos y otros
        public static decimal totalIngresos;
        public decimal totIngresos;
        public decimal totalEgresos;
        public decimal totalGanancia;
        public decimal parcialGanancia;

        public void cargarTiposMovimientos()
        {
            cboMovimiento.DataSource = contDiarioNE.listarTipoMovimiento();
            cboMovimiento.DisplayMember = "nombre";
            cboMovimiento.ValueMember = "IdMovimiento";
        }


        public void asignarEntradasControlDiario()
        {
            DateTime Hoy = DateTime.Today;
            cd.IdControlDiario =int.Parse(lblIdControl.Text);
            string fecha = Hoy.ToString("yyyy-MM-dd");
            cd.fecha = DateTime.Parse(fecha);
            cd.IdMovimiento = int.Parse(cboMovimiento.SelectedValue.ToString());
            cd.criterio = cboTipoDoc.Text.ToString();
            cd.monto = decimal.Parse(txtMonto.Text);
            cd.ganancia = decimal.Parse(txtGanancias.Text);
            cd.observacion = txtObservacion.Text;
        }

        public string registrarControlDiario()
        {
            asignarEntradasControlDiario();
            return contDiarioNE.aperturaCaja(cd);

        }

        public void calcularDatosMovimientos()
        {
            if (cboMovimiento.SelectedIndex==0)
            {
                totalIngresos = totalIngresos + decimal.Parse(txtMonto.Text);
                parcialGanancia += decimal.Parse(txtGanancias.Text);
                
            }
            else if (cboMovimiento.SelectedIndex == 1)
            {
                totalEgresos = totalEgresos + decimal.Parse(txtMonto.Text);
               // parcialGanancia = 0;
            }
            
            totalGanancia = totalIngresos-totalEgresos + parcialGanancia;         
            lblTotalIngresos.Text = totalIngresos.ToString();
            lblTotalEgresos.Text = totalEgresos.ToString();
            lblTotalGanancias.Text = totalGanancia.ToString();
        }

        public void limpiarEntradasMovimientos()
        {
            lblTotalIngresos.Text = "";
            lblTotalEgresos.Text = "";
            lblTotalGanancias.Text = "";
        
        }

        public VendedorNE vendNE = new VendedorNE();
        public Vendedor vendedor = new Vendedor();
        
        public void buscarVendedor()
        {
            int idCajero = MDIPrincipal.idVendedor;
            vendedor = vendNE.buscarVendedorById(idCajero);
            lblCajero.Text = vendedor.NombreVendedor + " " + vendedor.ApellidoVendedor;
        }

        public FrmControlDiario()
        {
            InitializeComponent();
            
        }



        private void FrmControlDiario_Load(object sender, EventArgs e)
        {
           
            this.MdiParent = MDIPrincipal.principal;

            FrmAperturaCaja fac = new FrmAperturaCaja();
            //FrmConProductos fcp = new FrmConProductos();
            //fcp.pasado += new FrmConProductos.pasar(ejecutarProducto);
            //fcp.Show();

            //cargarDatosCaja();
            lblCajero.Text = MDIPrincipal.idVendedor.ToString();
            cboCajaControl.Text = desc;
            cboCajaControl.ValueMember = id.ToString();
            cargarTiposMovimientos();
            cboTipoDoc.SelectedIndex = 0;
            lblIdControl.Text = idControlD.ToString();
            limpiarEntradasMovimientos();
            lblTotalIngresos.Text = totalIngresos.ToString();
            buscarVendedor();
        }

        public void mostrarControlDiario()
        {
            DateTime fecha = dtpFecha.Value;
            this.dgvControlDiarioCaja.DataSource = null;
            this.dgvControlDiarioCaja.AutoGenerateColumns = false;
            this.dgvControlDiarioCaja.Rows.Clear();
            lista = contDiarioNE.listarControlDiario(fecha);

            foreach (var item in lista)
            {
                int renglon = this.dgvControlDiarioCaja.Rows.Add();
                dgvControlDiarioCaja.Rows[renglon].Cells[0].Value = item.IdControlDiario.ToString();
                DateTime fecha1 = DateTime.Parse(item.fecha.ToString());
                dgvControlDiarioCaja.Rows[renglon].Cells[1].Value = fecha1.ToString("yyyy-MM-dd");
                dgvControlDiarioCaja.Rows[renglon].Cells[2].Value = item.TipoMovimiento.nombre;
                dgvControlDiarioCaja.Rows[renglon].Cells[3].Value = item.criterio.ToString();
                dgvControlDiarioCaja.Rows[renglon].Cells[4].Value = item.monto.ToString();
                dgvControlDiarioCaja.Rows[renglon].Cells[5].Value = item.ganancia.ToString();
                dgvControlDiarioCaja.Rows[renglon].Cells[6].Value = item.observacion.ToString();
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {

            mostrarControlDiario();
        }

        private void btnGrabar_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Registro Insertado: "+registrarControlDiario());
            mostrarControlDiario();
        }

        private void btnCierreCaja_Click(object sender, EventArgs e)
        {
            FrmCierreCaja fcc = new FrmCierreCaja();
            FrmCierreCaja.idCajero = MDIPrincipal.idVendedor;
            FrmCierreCaja.idControlDiario = int.Parse(lblIdControl.Text);
            FrmCierreCaja.idListaCaja = id;
            FrmCierreCaja.desc = desc;
            FrmCierreCaja.ventaNeta = decimal.Parse(lblTotalIngresos.Text);
            FrmCierreCaja.ventaCredito = decimal.Parse(lblTotalEgresos.Text);
            FrmCierreCaja.gananciaContado = decimal.Parse(lblTotalGanancias.Text);
            FrmCierreCaja.gananciaCredito = decimal.Parse(lblTotalGanancias.Text);
            this.Hide();
            fcc.Show();
        }

        private void txtMonto_TextChanged(object sender, EventArgs e)
        {
            
            
            decimal monto=0,ganancia=0;
            decimal por = decimal.Parse((0.20).ToString());
            
            try
            {
                if (string.IsNullOrEmpty(txtMonto.Text))
                {
                    MessageBox.Show("Ingrese el monto de la factura: ");
                    txtMonto.Focus();
                    return;
                }
                else
                {
                    monto = decimal.Parse(txtMonto.Text);
                    ganancia = por * monto;
                    if (cboMovimiento.SelectedIndex == 0)
                    {
                        txtGanancias.Text = ganancia.ToString();
                    }
                    else if (cboMovimiento.SelectedIndex == 1)
                    {
                        txtGanancias.Text = (0).ToString();
                    }
                }
             
            }
            catch (Exception)
            {
                
                throw;
            }
           
           
            
        }

        private void btnActualizar_Click(object sender, EventArgs e)
        {
            calcularDatosMovimientos();
        }

        private void cboMovimiento_SelectionChangeCommitted(object sender, EventArgs e)
        {
            if (cboMovimiento.SelectedIndex==1)
            {
                txtGanancias.Text = (0).ToString();
            }
        }

        

       
    }
}
